//rodowisko R dla pocztkujcych

//Rozdzia 6. - Planowanie ataku
//John M. Quick

//Prognozowanie wynikw za pomoc modeli regresji

> #zdefiniuj katalog roboczy rodowiska R
> #zastp przykadow ciek tak, ktra jest odpowiednia dla Ciebie
> setwd("C:/Users/RUser/Strateg/")

> #zaaduj obszar roboczy przeznaczony dla rozdziau 6.
> load("rDlaPocztkujcych_R_06_KopiaDlaCzytelnika.RData")

> #jaki jest prognozowany wynik ataku z zasadzki, podczas ktrego siy Shu wykorzystuj 5 000 onierzy?
> #model dla zasadzki: Ocena = 56 + 44 * uycie metody -  1,97 * czas trwania + 0,0018 * onierze Shu - 0,00082 * onierze Wei
>  56 + 44 * probabilitySuccessAmbush - 1.97 * meanDurationAmbush + 0.0018 * 5000 - 0.00082 * (5000 * ratioWeiShuSoldiersAmbush)
[1] 52.746


//Tworzenie wasnych funkcji

> #uyj polecenia function, aby zdefiniowa wasn funkcj
> #zdefiniuj model regresji dla ataku z zasadzki jako wasn funkcj w rodowisku R
> functionAmbushRating <- function(execution, duration, ShuSoldiers, WeiSoldiers)
+ {
+    56 + 44 * execution -
+    1.97 * duration +
+    0.0018 * ShuSoldiers - 0.00082 *
+    WeiSoldiers
+ } 

> #jaki jest prognozowany wynik ataku z zasadzki, podczas ktrego siy Shu wykorzystuj 5 000 onierzy?
> functionAmbushRating(probabilitySuccessAmbush, meanDurationAmbush, 5000, 5000 * ratioWeiShuSoldiersAmbush)
[1] 52.746

> #jaki jest prognozowany wynik ataku z zasadzki, podczas ktrego 5 000 onierzy Shu atakuje 1 000 onierzy Wei?
> functionAmbushRating(probabilitySuccessAmbush, meanDurationAmbush, 5000, 1000)
[1] 59.388

> #jaki jest prognozowany wynik udanego ataku z zasadzki, podczas ktrego 5 000 onierzy Shu atakuje 1 000 onierzy Wei?
> functionAmbushRating(1, meanDurationAmbush, 5000, 1000)
[1] 81.388

> #funkcja oceny walki bezporedniej
> functionHeadToHeadRating <- function(duration, ShuSoldiers, WeiSoldiers) {
+      97 - 0.77 * duration +
+      0.00054 * ShuSoldiers - 0.00028 * WeiSoldiers
+ }

> #funkcja oceny okrenia
> functionSurroundRating <- function(execution, duration, ShuSoldiers, WeiSoldiers) {
+      35 + 58 * execution -
+      0.15 * duration +
+      0.18 * ShuSoldiers - 0.19 * WeiSoldiers
+ }

> #funkcja oceny ataku ogniowego
> functionFireRating <- function(execution, duration, ShuSoldiers, WeiSoldiers) {
+      37 + 56 * execution -
+      1.24 * duration -
+      0.00000013 * (ShuSoldiers * WeiSoldiers)
+ }

//Tworzenie wasnych funkcji zorientowanych na zasoby

> #zmodyfikuj model dla zasadzki, aby wyznaczy liczb onierzy Shu biorcych udzia w bitwie
> #pierwotny model dla zasadzki: Ocena = 56 + 44 * uycie metody -  1,97 * czas trwania + 0,0018 * onierze Shu - 0,00082 * onierze Wei
> #model dla zasadzki wyznaczajcy liczb onierzy Shu: (Ocena - 56 - 44 * uycie metody  + 1.97 * czas trwania +   0.00082 * onierze Wei) / 0.0018

> #przekszta na wasn funkcj zmodyfikowane rwnanie modelu dla zasadzki 
> functionAmbushShuSoldiers <- function(rating, execution, duration, WeiSoldiers)
+ {
+    (rating - 56 - 44 * execution +
+    1.97 * duration +
+    0.00082 * WeiSoldiers) /
+    0.0018
+ }

> #ilu onierzy Shu musi wzi udzia w ataku z zasadzki przeciwko 10000  wojownik w Wei, aby uzyska wynik o wartoci rwnej 80?
> functionAmbushShuSoldiers(80, probabilitySuccessAmbush, meanDurationAmbush, 10000)
[1] 20551.11

> #ilu onierzy Shu musi wzi udzia w ataku z zasadzki przeciwko 10000  wojownikw  Wei, aby uzyska wynik o wartoci rwnej 80, w przypadku gdy   jestemy pewni udanego przeprowadzenia operacji?
> functionAmbushShuSoldiers(80, 1, meanDurationAmbush, 10000)
[1] 8328.889

> #stwrz funkcj, ktra szacuje liczb onierzy Shu wymaganych do przeprowadzenia walki bezporedniej
>  functionHeadToHeadShuSoldiers <- function(rating, duration, WeiSoldiers) {
+	(rating - 97 + 0.77 * duration +
+	0.00028 * WeiSoldiers) /
+	0.00054
+ }

> #stwrz funkcj, ktra szacuje liczb onierzy Shu wymaganych do przeprowadzenia okrenia
>  functionSurroundShuSoldiers <- function(rating, execution, duration, WeiSoldiers) {
+	(rating - 35 - 58 * execution +
+	0.15 * duration +
+	0.19 * WeiSoldiers) /
+	0.18
+ }

> #stwrz funkcj, ktra szacuje liczb onierzy Shu wymaganych do przeprowadzenia ataku ogniowego
> functionFireShuSoldiers <- function(rating, execution, duration, WeiSoldiers) {
+	(rating - 37 - 56 * execution +
+	1.24 * duration) /
+	(0.00000013 * - WeiSoldiers)
+ }

//Uwzgldnianie ogranicze zasobw w prognozach

> #funkcja uytkownika, ktra oblicza koszt bitwy
> #formua kosztw: koszt przemieszczania +  (koszt wyywienia + koszt wyposaenia) * czas trwania bitwy
functionGoldCost <- function(ShuSoldiers, distance, duration) 
{
   ShuSoldiers * ((distance / 100) + 2 * (duration / 30))
}

> #jaki jest przewidywany koszt w jednostkach zota przeprowadzenia ataku przez 25 000 onierzy Shu wymagajcego  przemieszczenia si na odlego 100 km i trwajcego 90 dni?
> functionGoldCost(25000, 100, 90)
[1] 1750000

> #wasna funkcja, ktra oblicza maksymaln odlego, na jak moe zosta przemieszczona armia Shu przy uyciu danych zasobw
> functionMaxDistance <- function(gold, ShuSoldiers, duration) {
+	100 * ((gold / ShuSoldiers) + (duration / 15))
+ }

> #na jak odlego moe zosta przemieszczona armia skadajca si z 25000 onierzy Shu, ktra powinna przeprowadzi 90-dniowy atak majc do dyspozycji 1000000 sztuk zota?
> functionMaxDistance(1000000, 25000, 90)
[1] 4600

//Ocenianie szans realizacji strategii

> #wasna funkcja wyznaczajca liczb onierzy Shu niezbdnych do przeprowadzenia okrelonego ataku ogniowego
> functionFireShuSoldiers <- function(rating, execution, duration, WeiSoldiers)
+ {
+    (rating - 37 - 56 * execution +
+    1.24 * duration) /
+    (0.00000013 * - WeiSoldiers)
+ }
> #zakadajc udane wykonanie akcji,  obliczmy, ilu onierzy Shu byoby potrzebnych do przeprowadzenia ataku ogniowego przeciwko 10000 onierzy Wei stacjonujcych 225 km od Anding?
> functionFireShuSoldiers(80, 1, 7, 10000  )
[1] 3323.077

//Ocenianie szans realizacji moliwych strategii

> #ile kosztowaoby przeprowadzenie 7-dniowego ataku ogniowego przy uyciu 3323 onierzy w odlegoci 225 km od Anding?
> functionGoldCost(3323 , 225, 7)
[1] 9027.483  

> #wasna funkcja, ktra oblicza maksymaln odlego, na jak mogaby zosta przemieszczona armia Shu,  przy uwzgldnieniu posiadanych zasobw
> functionMaxDistance <- function(gold, ShuSoldiers, duration) 
+ {
+    100 * ((gold / ShuSoldiers) + (duration / 15))
+ }
> #ile kilometrw mog si przemieci siy Shu skadajce si z 3323 onierzy, aby przeprowadzi 7-dniowy atak ogniowy,  przy zaoeniu, e dysponujemy 1 000 000 jednostek zota?
> functionMaxDistance(1000000, 3323 , 7)
[1] 30139.96 

> #korzystajc z danych o historycznych bitwach,  obliczmy, ilu onierzy Shu byoby potrzebnych do przeprowadzenia zwyciskiego 7-dniowego ataku ogniowego na siy Wei liczce 10 000 onierzy i stacjonujce w Anding  
> functionFireShuSoldiers(80, probabilitySuccessFire, 7, 10000)
[1] -25538.46

//Zapamitaj obszar roboczy i tre konsoli

> #zapisz zawarto swojego obszaru roboczego R w nowym pliku
> #pamitaj o dodaniu rozszerzenia .RData
> save.image("rDlaPocztkujcych_R_06_mjObszarRoboczy.RData")

> #zapisz zawarto swojej konsoli R poprzez skopiowanie i wklejenie treci do pliku teksowego